/**
 * 选择排序是一种简单直观的比较排序算法。其基本思想是：
 * - 每次从未排序的部分中选择最小（或最大）的元素，将其放到已排序部分的末尾。
 * - 重复上述过程，直到所有元素都已排序。
 * 具体步骤如下：
 * - 初始化：已排序部分为空，未排序部分为整个数组。
 * - 选择最小元素：在未排序部分中找到最小的元素。
 * - 交换位置：将找到的最小元素与未排序部分的第一个元素交换位置。
 * - 缩小范围：将已排序部分的范围扩大一位，未排序部分的范围缩小一位。
 * - 重复：重复步骤2-4，直到未排序部分为空。
 */

const arr1 = [5, 7, 1, 6, 8, 2, 3, 9, 4];
const arr2 = [5, 7, 1, 6, 8, 2, 3, 9, 4];

/**
 * 选择排序
 * @param arr 要排序的数组
 * @param mode 排序的模式(true:正序 false:倒序)
 * @param n 选择对比的次数
 * @returns 排序后的数组
 */

function selectSort(arr, mode = true, n = arr.length) {
  if (n <= 1) {
    return arr;
  }
  let maxIndex = 0;
  for (let i = 0; i < n; i++) {
    let _mode = mode ? arr[i] > arr[maxIndex] : arr[i] < arr[maxIndex];
    if (_mode) maxIndex = i;
  }
  [arr[maxIndex], arr[n - 1]] = [arr[n - 1], arr[maxIndex]];
  return selectSort(arr, mode, n - 1);
}

selectSort(arr1);
console.log("▶『正序』", arr1);
selectSort(arr2, false);
console.log("▶『倒序』", arr2);
